package com.iring.service.common;

import java.util.List;

import com.iring.domain.common.DeviceInfo;
import com.iring.domain.common.view.DeviceInfoView;
import com.iring.vo.common.device.CheckDomainVO;
import com.iring.vo.common.device.DeviceDdnsVO;
import com.iring.vo.common.device.DeviceUsernameVO;
import com.iring.vo.common.device.MacVO;
import com.iring.vo.common.device.ModDeviceVO;
import com.iring.vo.pbx.PBXRes;
import com.iring.vo.pbx.UploadDevice;
import com.iring.vo.sms.SMSSendVO;

/**
 * @author wanggan
 */
public interface DeviceService {

    /**
     * 通过用户名查找用户的设备信息列表
     *
     * @param username
     *            用户名
     * @return 拥有的设备信息列表
     */
    List<DeviceInfoView> listDevice(String username);


    /**
     * 通过mac查找设备的信息
     *
     * @param mac
     *            设备的mac地址
     * @return 设备信息
     */
    DeviceInfo findByMac(String mac);

    /**
     * 更新设备的在线状态和他的公网ip和端口号
     *
     * @param mac
     *            mac地址
     * @param ip
     *            公网ip
     * @param port
     *            公网端口
     * @return {@link DeviceInfo}
     */
    DeviceInfo updateDeviceStatus(String mac, String ip, Integer port);

    Boolean updateDeviceUsername(DeviceUsernameVO deviceUsernameVO, String username);

    Boolean sendDdnsVerifyCode(String username);

    Boolean checkDdnsAvaliablle(String username, CheckDomainVO checkDomainVO);

    String isDdnsAvaliablle(String username, MacVO macVO);

    Boolean updateDeviceDdns(DeviceDdnsVO deviceDdnsVO, String username);

    Boolean isIringtelNumAvailable(SMSSendVO SMSSendVO);

    Boolean sendValidCode(SMSSendVO SMSSendVO);

    /**
     * 更新设备的iringtel_num
     *
     * @param modDeviceVO
     *            {@link ModDeviceVO} 更新设备iringnum的请求参数
     * @return 更新结果
     */
    Boolean updateDeviceIringtelNum(ModDeviceVO modDeviceVO);

    PBXRes addDevice(UploadDevice uploadDevice);

    /**
     * 检查当前设备的在线状态和版本号
     *
     * @param macVO
     *            {@link MacVO}
     * @param username
     *                  用户名
     * @return {@link DeviceInfo}
     */
    DeviceInfo findDeviceState(MacVO macVO, String username);

    /**
     * 打开远程连接
     *
     * @param deviceInfo
     *            {@link DeviceInfo}
     * @return 开启结果
     */
    String openRemoteLink(DeviceInfo deviceInfo);

    String closeRemoteLink(DeviceInfo deviceInfo);

    String checkNetwork(DeviceInfo deviceInfo);

    DeviceInfoView getDeviceInfo(Integer id, String username);


}
